class ThreadDemo {
	
	public static void main(String[] args) throws Exception {
		// Thread t1 = new Thread(); // 空线程
		// MyThread t2 = new MyThread();
		// MyThread t21 = new MyThread();
		// MyThread t22 = new MyThread();
		
		// t1.start();
		// t2.start(); // 启动新线程，将控制权交给jvm
		// t2.run(); // 直接运行，并不会开启新线程

		// 需要调用构造方法：public Thread(Runnable target)
		Runnable task = new MyRunnable();
		Thread t3 = new Thread(task);
		t3.start();
		t3.join();
		Thread t4 = new Thread(task);
		t4.start();
		t4.join();
		Thread t5 = new Thread(task);		
		t5.start();
		t5.join();

		// 获取当前线程的引用
		// String name = Thread.currentThread().getName();
		// System.out.println(name);
		// for (int i =0;i < 20 ;i++ ) {
		// 	System.out.println(name + "-" +i);
		// }

		Thread.sleep(5000L); // 价值5万块的方法
		System.out.println("主线程结束...");
	}
}

class MyThread extends Thread {
	int tickects = 1000;

	// 不写构造方法，默认就会提供
	public MyThread(){
		super(); // 隐含调用，相当于在做new Thread()这个操作
	}

	// 重写超类的方法
	public void run() {
		// 这里放线程需要完成的任务
		System.out.println("我是一个新线程");
		// 获取当前线程的引用
		String name = Thread.currentThread().getName();
		System.out.println("线程名：" + name);
		for (int i =0;i<20 ;i++ ) {
			System.out.println(name+"-"+i);
		}
	}
}

class MyRunnable implements Runnable {
	int tickects = 1000;

	public void run() {
		String name = Thread.currentThread().getName();
		for(int i=0;i < 50; i++)
		System.out.println("我是一个Runnable的实现类：" + name);
	}
}